/******************************************************************************
 * * modem_main.c - implementation of modem adapter main functions
 *
 * *(C) Copyright 2019 Asr International Ltd.
 * * All Rights Reserved
 * ******************************************************************************/
#include "lv_conf.h"
#if USE_LV_WATCH_MODEM_ADAPTOR

#include "mmi_modem_adaptor_main.h"
TASK_HANDLE * modem_adp_task_id;

#define MODEM_ADP_TASK_PRIORITY 199

static VOID MMI_ModemAdp_Main(VOID * para);

/**
 * initiate mmi-modem adaptor module
 * param (in) FlightModeOn: UINT8
 * return  void
 */
VOID MMI_ModemAdp_Init_Req(UINT8 FlightModeOn)
{
    MMI_ModemAdp_NW_Init_Req();
    MMI_ModemAdp_Call_Init_Req();
    MMI_ModemAdp_Sms_Init_Req();
    // no need for watch MMI_ModemAdp_Ss_Init_Req();
    MMI_ModemAdp_Sim_Init_Req();
    MMI_ModemAdp_PS_Init_Req();
#if UI_IN_XIP
    static lv_xip_thread param;
    param.func = MMI_ModemAdp_Main;
    param.params = NULL;
    modem_adp_task_id = uos_create_task(lv_xip_thread_entry, &param, 64, 8 * 1000, MODEM_ADP_TASK_PRIORITY, "modem_adpator");
#else
    modem_adp_task_id = uos_create_task(MMI_ModemAdp_Main, NULL, 64, 8 * 1000, MODEM_ADP_TASK_PRIORITY, "modem_adpator");
#endif
    Ril_Init_Crane(FlightModeOn);
}

/**
 * module entry
 * param (in) void
 * return  void
 */
static VOID MMI_ModemAdp_Main(VOID * para)
{
    UI_INTER_MSG_ID MsgId;
    UI_Inter_Msg_t * pMsg;
    UI_Os_Msg_t * pOsMsg;

    // let uos_create_task return to get modem_adp_task_id
    while(modem_adp_task_id == NULL) {
        uos_sleep(10);
    }

    // get msg
    while(1) {
        // receive message
        pOsMsg = (UI_Os_Msg_t *)Hal_Receive_Message((TASK_ID)modem_adp_task_id, TRUE);
        MsgId  = pOsMsg->MsgHeader.MsgId;
        pMsg   = pOsMsg->pMsg;
        printf("modem adaptor get message %d\n", MsgId);

        if(((RIL_MODEMADP_NW_MSG_ID_START <= MsgId)
                && (MsgId <= RIL_MODEMADP_NW_MSG_ID_END))
                || ((MMI_MODEMADP_NW_MSG_ID_START <= MsgId)
                    && (MsgId <= MMI_MODEMADP_NW_MSG_ID_END))) {
            // NW msg
            printf("modem adaptor handle NW msg\n");
            MMI_ModemAdp_NW_Msg_handle(MsgId, pMsg);
        } else if(((RIL_MODEMADP_CC_MSG_ID_START <= MsgId)
                   && (MsgId <= RIL_MODEMADP_CC_MSG_ID_END))
                  || ((MMI_MODEMADP_CC_MSG_ID_START <= MsgId)
                      && (MsgId <= MMI_MODEMADP_CC_MSG_ID_END))) {
            // CC msg
            printf("modem adaptor handle CC msg, MsgId=%d\n", MsgId);
            MMI_ModemAdp_CC_Msg_handle(MsgId, pMsg);
        } else if(((RIL_MODEMADP_SS_MSG_ID_START <= MsgId)
                   && (MsgId <= RIL_MODEMADP_SS_MSG_ID_END))
                  || ((MMI_MODEMADP_SS_MSG_ID_START <= MsgId)
                      && (MsgId <= MMI_MODEMADP_SS_MSG_ID_END))) {
            // SS msg
            printf("modem adaptor handle SS msg\n");
            // no need for watch  MMI_ModemAdp_SS_Msg_handle(MsgId, pMsg);
        } else if(((RIL_MODEMADP_SMS_MSG_ID_START <= MsgId)
                   && (MsgId <= RIL_MODEMADP_SMS_MSG_ID_END))
                  || ((MMI_MODEMADP_SMS_MSG_ID_START <= MsgId)
                      && (MsgId <= MMI_MODEMADP_SMS_MSG_ID_END))) {
            // SMS msg
            printf("modem adaptor handle SMS msg\n");
            MMI_ModemAdp_Sms_Msg_handle(MsgId, pMsg);
        } else if(((RIL_MODEMADP_SIM_MSG_ID_START <= MsgId)
                   && (MsgId <= RIL_MODEMADP_SIM_MSG_ID_END))
                  || ((MMI_MODEMADP_SIM_MSG_ID_START <= MsgId)
                      && (MsgId <= MMI_MODEMADP_SIM_MSG_ID_END))) {
            // SIM msg
            printf("modem adaptor handle SIM msg\n");
            MMI_ModemAdp_Sim_Msg_handle(MsgId, pMsg);
        }

        Hal_Mem_Free(pMsg);
        Hal_Mem_Free(pOsMsg);
    }
} /* MMI_ModemAdp_Main */

/**
 * get Ril sim Id from UI sim Id
 * param (in) UiSimId: MMI_MODEM_SIM_ID
 * return RIL_SIM_ID
 */
RIL_SIM_ID  MMI_ModemAdp_Get_Ril_SimId(MMI_MODEM_SIM_ID UiSimId)
{
    if(MMI_MODEM_SIM_1 == UiSimId) {
        return(RIL_SIM_1);
    } else {
        return(RIL_SIM_2);
    }
}

/**
 * get UI SimId from Ril Sim Id
 * param (in) RilSimId: RIL_SIM_ID
 * return  MMI_MODEM_SIM_ID
 */
MMI_MODEM_SIM_ID  MMI_ModemAdp_Get_UI_SimId(RIL_SIM_ID RilSimId)
{
    if(RIL_SIM_1 == RilSimId) {
        return(MMI_MODEM_SIM_1);
    } else {
        return(MMI_MODEM_SIM_2);
    }
}

#endif // USE_LV_WATCH_MODEM_ADAPTOR
